package com.ht.modules.ai.account.service.impl;

import com.ht.utils.DicConstants;
import com.ht.modules.ai.account.entity.Account;
import com.ht.modules.ai.account.entity.AccountVo;
import com.ht.modules.ai.account.mapper.AccountMapper;
import com.ht.modules.ai.account.service.IAccountService;
import com.ht.utils.PasswordUtil;
import com.ht.utils.oConvertUtils;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.apache.logging.log4j.util.Strings;

import java.util.List;

/**
 * 账号信息
 */
@Service
public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> implements IAccountService {

	@Autowired
	private AccountMapper accountMapper;

    /**
	 * 分页列表查询
	 * @param accountVo 参数
	 * @param page 分页对象
	 * @param column 默认排序列
	 * @param order 默认排序方式
	 * @return 分页列表
	 */
	@Override
	public Page<AccountVo> list(Page<AccountVo> page, AccountVo accountVo, String column, String order) {
		 return page.setRecords(accountMapper.list(page, accountVo, column, order));
	}

    /**
     * 不分页列表查询
     * @param accountVo 参数
     * @param column 默认排序列
     * @param order 默认排序方式
     * @return 不分页列表
     */
    @Override
    public List<AccountVo> listNoPage(AccountVo accountVo, String column, String order){
         return accountMapper.list(null, accountVo, column, order);
    }

    /**
     * 添加
     * @param account 参数
     */
    @Override
    public void add(Account account){
        account.setDelFlag(DicConstants.DEL_FLAG_WSC);
        String username = account.getAccount();
        String password = account.getPassword();
        String salt = oConvertUtils.randomGen(8);
        String userPassword = PasswordUtil.encrypt(username, password, salt);
        account.setPassword(userPassword);
        this.save(account);
    }

    /**
     * 编辑
     * @param account 参数
     */
    @Override
    public void edit(Account account){
        Account accountEntity = this.getById(account.getId());
        if(null == accountEntity){
            throw new RuntimeException("未找到对应实体！");
        }
        this.updateById(account);
    }

    /**
     * 通过id删除（逻辑删除）
     * @param id 参数
     */
    @Override
    public void delete(Integer id){
        Account account = this.getById(id);
        if(null == account){
            throw new RuntimeException("未找到对应实体！");
        }
        account.setDelFlag(DicConstants.DEL_FLAG_YSC);
        this.updateById(account);
    }

    /**
     * 批量删除（逻辑删除）
     * @param ids 参数
     */
    @Override
    public void deleteBatch(String ids){
        if(Strings.isBlank(ids)){
            throw new RuntimeException("参数不识别！");
        }
        accountMapper.updateBatchByIds("del_flag", DicConstants.DEL_FLAG_YSC, ids.split(","));
    }

    /**
	 * 通过id查询
	 * @param id 参数
	 * @return 查询结果
	 */
    @Override
    public Account queryById(Integer id){
        Account account = this.getById(id);
        if(null == account){
            throw new RuntimeException("未找到对应实体！");
        }
        return account;
    }

    /**
     * 通过id查询Vo
     * @param id 参数
     * @return 查询结果
     */
    @Override
    public AccountVo queryVoById(Integer id){
        AccountVo accountVo = accountMapper.getVoById(id);
        if(null == accountVo){
            throw new RuntimeException("未找到对应实体！");
        }
        return accountVo;
    }

    /**
     * 通过excel导入数据
     *
     * @param importList 参数
     */
    @Override
    public void importExcel(List<Account> importList) {
        if(importList.isEmpty()){
            return;
        }
        for(Account eMap : importList){
            eMap.setDelFlag(DicConstants.DEL_FLAG_WSC);
        }
        this.saveBatch(importList);
    }

}
